<?php

namespace app\queue;

use app\helpers\RedisLock;
use think\queue\Job;

class TestQueue
{
    public function fire(Job $job, $data)
    {

        // 获取当前尝试次数
        $attempts = $job->attempts();
        // 业务处理逻辑
        try {
            echo "开始处理任务第{$attempts}: ".date('Y-m-d H:i:s')."\n";
            print_r($data);

            // 模拟会出错的代码
            $i = 1/ 0;

            // 模拟耗时操作
            sleep(2);

            // 任务执行成功
            $job->delete();
            echo "任务处理完成\n";

        } catch (\Exception $e) {
            dump($e);
            if($attempts <= 3){
                // 指数退避策略：重试延迟时间逐渐增加（2,4,8秒）
                $delay = pow(2, $attempts);
                echo "任务处理失败，第 {$attempts} 次重试，延迟 {$delay} 秒\n";
                $job->release($delay);
            } else {
                $job->delete();
                echo "任务处理失败，已超过最大尝试次数(3次)\n";
                // 可以记录到日志或数据库，或调用failed方法
            }
        }
    }

    public function failed($data,$e){
        dump('失败了',$data,$e);
    }
}